package com.wx.gof.pattern.behavioral.templatemethod;

/**
 * @ClassName Application
 * @Author wx
 * @Description
 * 定义:
 * 准备一个抽象类,定义固定步骤，步骤中将不可变部分逻辑实现，然后声明一些抽象方法来迫使子类实现剩余的可变部分逻辑，
 * 不同的子类可以以不同的方式实现这些抽象方法，剩余的可变逻辑有不同的实现
 * 适用场景:
 * 1.固定的一套固定步骤，步骤中有不变的部分逻辑，并将可变的逻辑留给子类去实现
 * 2.各个子类中公共的行为被提取出来并集到一个公共父类中，从而避免代码重复
 * 优点:
 * 1.提高复用性(公用代码)
 * 2.提高扩展性(不同子类不同实现)
 * 缺点:
 * 1.类数目增加(子类太多)
 * 2.继承关系自身缺点，如果父类添加新的抽象方法，所有子类都要改一遍
 * 理解:
 * 应用程序-模板方法设计模式(适用开闭原则，
 * 不可变内容放父类，可变内容子类实现，使用次设计模式要抽象清楚，那些行为是可变的,那么行为是不可变的)
 * @Date 2018-12-12-22:10
 */
public class Application {
    public static void main(String[] agrs){
        AStudy javaStudy = new JavaStudy();
        javaStudy.todayStudy();
        System.out.println("###########################################");
        AStudy jsStudy = new JsStudy();
        jsStudy.todayStudy();
    }
}
